﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.server.types;

namespace l1cs.server.types
{
    public class Rectangle
    {
        private int _left;
        private int _top;
        private int _right;
        private int _bottom;

        public Rectangle( Rectangle rect )
        {
            set( rect );
        }

        public Rectangle( int left, int top, int right, int bottom )
        {
            set( left, top, right, bottom );
        }

        public Rectangle()
            : this( 0, 0, 0, 0 ) { }

        public void set( Rectangle rect )
        {
            set( rect.getLeft(), rect.getTop(), rect.getWidth(), rect.getHeight() );
        }

        public void set( int left, int top, int right, int bottom )
        {
            _left = left;
            _top = top;
            _right = right;
            _bottom = bottom;
        }

        public int getLeft()
        {
            return _left;
        }

        public int getTop()
        {
            return _top;
        }

        public int getRight()
        {
            return _right;
        }

        public int getBottom()
        {
            return _bottom;
        }

        public int getWidth()
        {
            return _right - _left;
        }

        public int getHeight()
        {
            return _bottom - _top;
        }

        /**
         * 指定された点(x, y)が、このRectangleの範囲内にあるかを判定する。
         * 
         * @param x
         *            判定する点のX座標
         * @param y
         *            判定する点のY座標
         * @return 点(x, y)がこのRectangleの範囲内にある場合、true。
         */
        public bool contains( int x, int y )
        {
            return ( _left <= x && x <= _right ) && ( _top <= y && y <= _bottom );
        }

        /**
         * 指定されたPointが、このRectangleの範囲内にあるかを判定する。
         * 
         * @param pt
         *            判定するPoint
         * @return ptがこのRectangleの範囲内にある場合、true。
         */
        public bool contains( Point pt )
        {
            return contains( pt.getX(), pt.getY() );
        }
    }
}
